Software testing aids in maintaining quality of a software product by revealing defects of the software product. Software testing typically entails identifying specific test cases to verify that the software product correctly performs expected functionalities of the software product. Further, the software product may be a complex system, i.e., a system including several components/modules, which may require generation of a large number of test cases which can be particularly a challenging task. It is through testing of individual components/modules, a tester verifies that each component/module performs its designated functionality without any error. Additionally, the tester is typically required to test interactions between different states (e.g., active, inactive, etc.) of the different components/modules to ensure that the components/modules collectively perform the system's designated functionalities flawlessly, in each state and at all times. A first challenge in testing complex systems may be, in identifying an optimum number of test cases to be generated for providing a maximum possible coverage. Identifying such optimum number of test cases, required for providing the maximum possible coverage, can be an arduous task. Even after performing the arduous task of identifying the optimum number of test cases for the complex system, the tester may remain unsure whether enough test cases are considered for providing the maximum possible coverage.
A second challenge in conducting the complex system testing may be ascertaining contents of each test case. Typically, test cases are selected intuitively. A test case selection may be based on tester's expertise and experience on similar projects. Alternatively, the test case selection may be based upon criticality of the complex system. Further, the test cases may be generated either manually or automatically. However, the manual test case generation may increase testing cycle time and may be more error prone. A third challenge in generating test cases for the complex system can be providing a distributed coverage of a software testing domain. Further, arriving at complex combinations of all variables of a complex multi-variable system can be extremely taxing. Problem may exacerbate when the tester seeks to manually identify a concise set of test cases in the complex multi-variable system. After identifying the concise set of test cases in the complex multi-variable system, executing the testing based on the concise set of test cases can be demanding. Also, keeping track of a large number of the generated test cases and maintaining results of the test cases in a cohesive manner can be equally or more demanding.
Other features of the present embodiments will be apparent from the accompanying drawings and from the detailed description that follow.